/*
 * 创建时间：2015年7月27日 
 */
package com.tuanzi.loan.workflow.vo;

import java.io.Serializable;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;

import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang.StringUtils;

import com.tuanzi.loan.workflow.entity.ScriptTask;

import lombok.Data;

/**
 * @author Ray
 * @date 2018/01/16
 */
@Data
public class ActivityResponse implements Serializable {

	private static final long serialVersionUID = -4590404051220238595L;

	/** 数据库主键 */
	private String id;

	/** 活动标识 */
	private String activityId;

	/** 活动名称 */
	private String activityName;

	/** 活动类型 */
	private String activityType;

	/** 流程定义id */
	private String processDefinitionId;

	/** 流程实例id */
	private String processInstanceId;

	/** 执行对象id */
	private String executionId;

	/** 任务id */
	private String taskId;

	/** 任务变量 */
	private Map<String, Object> taskVariables;

	/** 活动启动时间 */
	private Date startTime;

	/** 活动结束时间 */
	private Date endTime;

	/** 活动持续时间 */
	private Long durationInMillis;

	/** 拥有人帐号 */
	private String owner;

	/** 拥有人名称 */
	private String ownerName;

	/** 任务执行者帐号（user account） */
	private String assignee;

	/** 任务执行者名称（user name） */
	private String assigneeName;

	/** 任务执行者变量 */
	private String assigneeVariable;

	/** 任务执行者变量对应assigneeResponse */
	private AssigneeResponse assigneeVariableResponse;

	/** 任务候选执行者集合 */
	private List<AssigneeResponse> assignees;

	/** 流入本节点的路由集合 */
	private List<RouterResponse> preRouters;

	/** 流出本节点的路由集合 */
	private List<RouterResponse> postRouters;

	/** 绑定表单地址 */
	private String formUrl;

	/** 是否用户任务 */
	private boolean userEvent;

	private List<ScriptTask> scriptTasks;

	public String getUserAssigneeDisaply() {
		if (CollectionUtils.isEmpty(assignees)) {
			return StringUtils.EMPTY;
		}
		return assignees.stream().filter(x -> x.getAssigneeType() == AssigneeType.USER).map(AssigneeResponse::getAssigneeName).sorted().collect(Collectors.joining(","));
	}

	public String getRoleAssigneeDisaply() {
		if (CollectionUtils.isEmpty(assignees)) {
			return StringUtils.EMPTY;
		}
		return assignees.stream().filter(x -> x.getAssigneeType() == AssigneeType.ROLE).map(AssigneeResponse::getAssigneeName).sorted().collect(Collectors.joining(","));
	}
}
